﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using Doves.Utilities;

namespace Doves.DataAccessLayer.DAO
{
    public class ArticleAnalizerDAO : IArticleAnalizer
    {
        private static DoveNewsEntities dataContext;
        private IRepository<ArticleAnalizer> repository;
        public ArticleAnalizerDAO()
        {
            dataContext = new DoveNewsEntities();
            repository = new RepositoryDAO<ArticleAnalizer>(dataContext);
        }

        public IEnumerable<ArticleAnalizer> GetAllArticleAnalizer()
        {
            return repository.GetAll();
        }

        public ArticleAnalizer GetArticleAnalizerById(int Id)
        {
            return repository.Find(obj => obj.Id == Id).Single();
        }

        public bool UpdateArticleAnalizer(ArticleAnalizer inArticleAnalizer)
        {
            if (inArticleAnalizer == null) return false;
            ArticleAnalizer upArticleAnalizer = repository.First(sobj => sobj.Id == inArticleAnalizer.Id);
            if (upArticleAnalizer == null) return false;
            upArticleAnalizer = inArticleAnalizer;
            return repository.SaveChanges() > 0;
        }
        public bool InsertArticleAnalizer(ArticleAnalizer inArticleAnalizer)
        {
            if (inArticleAnalizer == null) return false;
            repository.Add(inArticleAnalizer);
            return repository.SaveChanges() > 0;
        }

        ///// <summary>
        ///// Check URL of ArticleAnalizer exists or not
        ///// </summary>
        ///// <param name="inArticleAnalizer"></param>
        ///// <returns></returns>
        //public bool IsExists( ArticleAnalizer inArticleAnalizer)
        //{
        //    if (dataContext.ArticleAnalizers.Any(o => o. == inArticleAnalizer.Url))
        //    {
        //        return true;
        //    }
        //    else
        //    {
        //        return false;
        //    }
        //}

        public ReturnValue<bool> DelArticleAnalizer(int Id)
        {
            ReturnValue<bool> ret = new ReturnValue<bool>(false, "");
            try
            {
                ArticleAnalizer objDel = repository.First(obj => obj.Id == Id);
                ret = DelArticleAnalizer(objDel);
            }
            catch (Exception ex)
            {
                ret.RetValue = false;
                ret.Msg = "Dữ liệu đã được sử dung trong chương trình - không thể xóa !";
            }
            return ret;
        }


        public ReturnValue<bool> DelArticleAnalizer(ArticleAnalizer inArticleAnalizer)
        {
            ReturnValue<bool> ret = new ReturnValue<bool>(false, "");
            if (inArticleAnalizer == null)
            {
                ret.Msg = "Input null";
                return ret;
            }
            try
            {
                repository.Delete(inArticleAnalizer);
                ret.RetValue = repository.SaveChanges() > 0;
            }
            catch (System.Exception ex)
            {
                ret.RetValue = false;
                ret.Msg = "Dữ liệu đã được sử dung trong chương trình - không thể xóa !";
            }
            return ret;
        }

        public ArticleAnalizer GetArticleAnalizerByZombyId(int inZomId)
        {
            return dataContext.ArticleAnalizers.Where(a => a.ZomId == inZomId).SingleOrDefault();
        }

        public ArticleAnalizer GetArticleAnalizerByLink(Link inLink)
        {
            return dataContext.ArticleAnalizers.Where(a => a.ZomId == inLink.ZomId).SingleOrDefault();
        }
    }
}
